﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GestorSQL.DAO;
using GestorSQL.BusinessEntities;
using AspectIntercept;
using GestorSQL.DAO.InterceptDAO;

namespace GestorSQL.BLL
{
    [Intercept(InterceptAllMethods = true, PreProcesor = typeof(DBTraceProcessor), PostProcesor = typeof(DBTraceProcessor), OmitMethods = new string[] { })]
    public class AssignmentsManager : InterceptContext
    {
        #region Variables Privadas
        private IGestorSqlDao dao = new GestorSqlDao();

        #endregion

        #region Metodos Publicos
        /// <summary>
        /// Agrega un registro de asignación a un nuevo autorizador
        /// </summary>
        /// <param name="userName"></param>
        /// <returns></returns>
        [InterceptOmit]
        public Resultado CrearAsignacion(string userName)
        {
            return dao.SaveAssignment(userName);
        }

        /// <summary>
        /// Elimina la asignación a un usuario autorizador
        /// </summary>
        /// <param name="userName"></param>
        /// <returns></returns>
        [InterceptOmit]
        public Resultado EliminarAsignacion(string userName)
        {
            return dao.RemoveAssignment(userName);

        }

        /// <summary>
        /// Obtiene el asignador con menos asignaciones y realiza de un nuevo caso.
        /// </summary>
        /// <param name="userName"></param>
        /// <returns>Nombre Usuario Autorizador</returns>
        public string AsignarNuevoCasoAutorizador()
        {
            List<Asignacione> AssigmentList = dao.GetAssignmentList();

            Asignacione currentAssigment = AssigmentList.OrderBy(x => x.CasosActivos).FirstOrDefault();
            dao.UpdateAssigment(currentAssigment.UsuarioAutorizador, currentAssigment.CasosActivos + 1);

            return currentAssigment.UsuarioAutorizador;
        }

        #endregion
    }
}
